//
//  NetworkTools.m
//  Block的循环引用
//
//  Created by 伍银荣 on 2021/12/3.
//  Copyright © 2021 com.WYR. All rights reserved.
//

#import "NetworkTools.h"

@interface NetworkTools ()

@property (nonatomic, copy) void(^finishedBlock)(NSString *);
@end
@implementation NetworkTools
/**
 block 是一组提前准备好的代码,在需要的时候执行,可以做参数传递
 
 在异步方法中,如果能够执行 block,就直接执行
 如果不能执行 block ,通常需要定义一个属性,记录block,在需要的时候执行
 */

//block的间接执行(定义一个 block 参数)
-(void)loadData:(void (^)(NSString * html))finished {
    //使用属性记录 Block
    self.finishedBlock = finished;
    
    //异步加载
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSLog(@"异步处理 - %@",[NSThread currentThread]);
        //让异步线程睡 5 秒
        sleep(5);
        
        //返回主线程
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"主线程回调 - %@",[NSThread currentThread]);
            //由working 调用finish
            [self working];  //finished执行完毕, finish中的参数被释放,会解除对 self 的强引用
            
        });
    });
}

- (void)working {
    //执行回调函数
    if (self.finishedBlock != nil) {
        self.finishedBlock(@"html");
    }
}


//直接执行
- (void)loadData2:(void(^)(NSString *))finished {
    //异步加载
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSLog(@"异步处理 - %@",[NSThread currentThread]);
        //返回主线程
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"主线程回调 - %@",[NSThread currentThread]);
            //执行回调
            finished(@"html");  //finished执行完毕, finish中的参数被释放,会解除对 self. 的强引用
            
        });
    });
}

-(void)dealloc {
    NSLog(@"networkTool 88");
}

@end
